home *** CD-ROM | disk | FTP | other *** search
/ United Public Domain Gold 2 / United Public Domain Gold 2.iso / utilities / pu619.dms / pu619.adf / Utilities / TASKE.LHA / Source / main.c < prev    next >
C/C++ Source or Header  |  1993-08-26  |  7KB  |  199 lines

  1. /*
  2.  * Copyright (c) 1993 Michael D. Bayne.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without modification, are permitted provided that
  6.  * the following conditions are met:
  7.  *
  8.  * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
  9.  *    following disclaimer.
  10.  *
  11.  * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
  12.  *    following disclaimer in the documentation and/or other materials provided with the distribution.
  13.  *
  14.  * 3. All advertising materials mentioning features or use of this software must display the following
  15.  *    acknowledgement:
  16.  *
  17.  *       This product includes software developed by Michael D. Bayne.
  18.  *
  19.  * 4. My name may not be used to endorse or promote products derived from this software without specific prior
  20.  *    written permission.
  21.  *
  22.  * THIS SOFTWARE IS PROVIDED BY MICHAEL D. BAYNE ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
  23.  * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  24.  * IN NO EVENT SHALL MICHAEL D. BAYNE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  25.  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  26.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  27.  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  28.  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  29.  */
  30.  
  31. #include <exec/execbase.h>
  32. #include <exec/memory.h>
  33.  
  34. #include <intuition/intuitionbase.h>
  35. #include <intuition/screens.h>
  36.  
  37. #include <libraries/gadtools.h>
  38. #include <libraries/reqtools.h>
  39.  
  40. #include <ctype.h>
  41.  
  42. #include "TaskE.h"
  43. #include "defs.h"
  44.  
  45. #include "TaskE_rev.h"
  46.  
  47. static    UBYTE    *VersTag = VERSTAG;
  48.  
  49. extern    struct    ExecBase    *SysBase;
  50.     struct    ReqToolsBase    *ReqToolsBase;
  51.     struct    IntuitionBase    *IBase;
  52.     struct    List        *taskList, *scrList;
  53.     ULONG    Tags[] = { RTEZ_ReqTitle, (ULONG)VERS, RT_Window, 0L, RT_LockWindow, TRUE, RT_Underscore, '_', TAG_END },
  54.         killMode = NONE, CXFlag;
  55.  
  56. void getScreens( struct List *scrList )
  57. {
  58.     struct    Screen    *Scr;
  59.         ULONG    lock;
  60.     struct    Node    *scrNode;
  61. static        UBYTE    *noName = "Untitled Screen";
  62.  
  63.     GT_SetGadgetAttrs( TaskEGadgets[GD_SCREENL], TaskEWnd, 0l, 
  64.         GTLV_Labels, 0l, TAG_DONE );
  65.  
  66.     while ( scrList->lh_TailPred != ( struct Node *)scrList ) {
  67.         scrNode = RemHead( scrList );
  68.         FreeMem( scrNode->ln_Name, 30 );
  69.         FreeMem( scrNode, sizeof( struct Node ));
  70.     }
  71.  
  72.     lock = LockIBase( 0 );
  73.  
  74.     for( Scr = IBase->FirstScreen; Scr; Scr = Scr->NextScreen ) {
  75.         if( scrNode = AllocMem( sizeof( struct Node ), MEMF_CLEAR )) {
  76.             if( Scr->DefaultTitle ) {
  77.                 if( scrNode->ln_Name = AllocMem( 30, MEMF_CLEAR )) {
  78.                     CopyMem( Scr->DefaultTitle, scrNode->ln_Name, 30 );
  79.                     AddTail( scrList, scrNode );
  80.                 } else break;
  81.             } else scrNode->ln_Name = noName;
  82.         } else break;
  83.     }
  84.  
  85.     UnlockIBase( lock );
  86.  
  87.     GT_SetGadgetAttrs( TaskEGadgets[GD_SCREENL], TaskEWnd, 0l, 
  88.         GTLV_Labels, scrList, TAG_DONE );
  89. }
  90.  
  91. void getTasks( struct List *taskList )
  92. {
  93.     struct Node *execNode;
  94.     struct TaskNode *taskNode;
  95.  
  96.     GT_SetGadgetAttrs( TaskEGadgets[GD_TASKL], TaskEWnd, 0l, GTLV_Labels, 0L, TAG_DONE );
  97.     while ( taskList->lh_TailPred != ( struct Node *)taskList ) {
  98.         taskNode = ( struct TaskNode * )RemHead( taskList );
  99.         FreeMem( taskNode, sizeof( struct TaskNode ));
  100.     }
  101.  
  102.         Disable();
  103.         
  104.     for( execNode = (SysBase->TaskWait).lh_Head; execNode; execNode = execNode->ln_Succ ) {
  105.         if(( execNode->ln_Name )&&( isgraph( execNode->ln_Name[0] ))) {
  106.             if( taskNode = AllocMem( sizeof( struct TaskNode ), MEMF_CLEAR )) {
  107.                 CopyMem( execNode->ln_Name, taskNode->tn_Name, 31 );
  108.                 taskNode->tn_Name[31] = '\0';
  109.                 taskNode->tn_Node.ln_Pri = execNode->ln_Pri;
  110.                 taskNode->tn_TaskAddress = (ULONG)execNode;
  111.                 taskNode->tn_SigAlloc = (( struct Task * )execNode )->tc_SigAlloc;
  112.                 taskNode->tn_SigWait = (( struct Task * )execNode )->tc_SigWait;
  113.                 taskNode->tn_Node.ln_Name = taskNode->tn_Name;
  114.                 AddTail( taskList, ( struct Node * )taskNode );
  115.             } else break;
  116.         }
  117.     }
  118.     for( execNode = (SysBase->TaskReady).lh_Head; execNode; execNode = execNode->ln_Succ ) {
  119.         if(( execNode->ln_Name )&&( isgraph( execNode->ln_Name[0] ))) {
  120.             if( taskNode = AllocMem( sizeof( struct TaskNode ), MEMF_CLEAR )) {
  121.                 CopyMem( execNode->ln_Name, taskNode->tn_Name, 31 );
  122.                 taskNode->tn_Name[31] = '\0';
  123.                 taskNode->tn_Node.ln_Pri = execNode->ln_Pri;
  124.                 taskNode->tn_TaskAddress = (ULONG)execNode;
  125.                 taskNode->tn_SigAlloc = (( struct Task * )execNode )->tc_SigAlloc;
  126.                 taskNode->tn_SigWait = (( struct Task * )execNode )->tc_SigWait;
  127.                 taskNode->tn_Node.ln_Name = taskNode->tn_Name;
  128.                 AddTail( taskList, ( struct Node * )taskNode );
  129.             } else break;
  130.         }
  131.     }
  132.  
  133.     Enable();
  134.     GT_SetGadgetAttrs( TaskEGadgets[GD_TASKL], TaskEWnd, 0l, GTLV_Labels, taskList, TAG_DONE );
  135. }
  136.  
  137. void taskExit( int retval )
  138. {
  139.     struct Node *Node;
  140.  
  141.     CloseTaskEWindow();
  142.     CloseDownScreen();
  143.  
  144.     ShutdownCX();
  145.  
  146.     if( ReqToolsBase ) CloseLibrary(( struct Library * )ReqToolsBase );
  147.     if( IBase ) CloseLibrary(( struct Library * )IBase );
  148.     if( scrList ) {
  149.         while ( scrList->lh_TailPred != ( struct Node *)scrList ) {
  150.             Node = RemHead( scrList );
  151.             FreeMem( Node->ln_Name, 30 );
  152.             FreeMem( Node, sizeof( struct Node ));
  153.         }
  154.         FreeMem( scrList, sizeof( struct List ));
  155.     }
  156.     if( taskList ) {
  157.         while ( taskList->lh_TailPred != ( struct Node *)taskList ) {
  158.             Node = RemHead( taskList );
  159.             FreeMem( Node, sizeof( struct TaskNode ));
  160.         }
  161.         FreeMem( taskList, sizeof( struct List ));
  162.     }
  163.     exit( retval );
  164. }
  165.  
  166. void main( void )
  167. {
  168.     ULONG            retval = 1, sigs;
  169.  
  170.     if(!( ReqToolsBase = ( struct ReqToolsBase * )OpenLibrary( REQTOOLSNAME, REQTOOLSVERSION ))) taskExit( 3 );
  171.     if(!( IBase = ( struct IntuitionBase * )OpenLibrary( "intuition.library", 37L ))) taskExit( 3 );
  172.  
  173.     if(!( taskList = AllocMem( sizeof( struct List ), MEMF_CLEAR ))) taskExit( 1 );
  174.     if(!( scrList = AllocMem( sizeof( struct List ), MEMF_CLEAR ))) taskExit( 1 );
  175.     NewList( taskList );
  176.     NewList( scrList );
  177.  
  178.     if( SetupScreen()) taskExit( 4 );
  179.     if( OpenTaskEWindow()) taskExit( 4 );
  180.  
  181.     Tags[3] = (ULONG)TaskEWnd;
  182.  
  183.     getScreens( scrList );
  184.     getTasks( taskList );
  185.  
  186.     if(!( CXFlag = SetupCX())) taskExit( 5 );
  187.  
  188.     ScreenToFront( TaskEWnd->WScreen );
  189.  
  190.     while( retval ) {
  191.         sigs = Wait( SIG_BREAK | SIG_WINDOW | CXFlag );
  192.         if( sigs & SIG_WINDOW ) retval = HandleTaskEIDCMP();
  193.         if( sigs & SIG_BREAK ) retval = 0;
  194.         if( sigs & CXFlag ) retval = handleCxMess();
  195.     }
  196.  
  197.     taskExit( 0 );
  198. }
  199.